home *** CD-ROM | disk | FTP | other *** search
/ Professional Soft Collection 1.02 / Professional Soft Collection 1.02.iso / nc50 / ncpscrip.hd! / NCPSCRIP.HDR
Text File  |  1995-02-07  |  14KB  |  601 lines

  1. %    ================================================
  2. %    Create a dictionary, called PSDICT, to contain
  3. %    all the verbs and variables for this stuff.
  4. %    The dictionary is created, loaded with the verbs,
  5. %    and then pushed on the dictionary stack
  6. %    ================================================
  7.  
  8. /psdict 300 dict def
  9.  
  10. psdict begin
  11.  
  12. % --- declare all variables used in the dictionary
  13.  
  14. /pagenum 1 def
  15. /linenum 1 def
  16. /str 1 string def
  17. /margintop 1 def
  18. /marginbottom 1 def
  19. /marginleft 1 def
  20. /marginright 1 def
  21. /charsize 1 def
  22. /tabsize 1 def
  23. /columns 1 def
  24. /numbering false def
  25. /orientation 1 def
  26. /pageject false def
  27. /header [1] def
  28. /footer [1] def
  29. /frameleft 1 def
  30. /frametop 1 def
  31. /framebottom 1 def
  32. /framevert 1 def
  33. /pageleft 1 def
  34. /pageright 1 def
  35. /pagetop 1 def
  36. /pagebottom 1 def
  37. /headerheight 1 def
  38. /footerheight 1 def
  39. /buf 1 string def
  40. /bi 1 def
  41. /hfrow 1 def
  42. /hfpos 1 def
  43. /currentframe 1 def
  44.  
  45. % ============ Global 'Constants' ============
  46.  
  47. /hfpoints 12 def                            % point size for header/footer font
  48. /hffont /Times-Roman findfont hfpoints scalefont def
  49.  
  50. % ============ Settings Commands ============
  51.  
  52. % ------------ PSCS : Set Character Size
  53. /pscs {
  54.     /charsize exch def
  55. } bind def
  56.  
  57. % ------------ PSMT : Set Margin Top
  58. /psmt {
  59.     /margintop exch 72 mul def
  60. } bind def
  61.  
  62. % ------------ PSML : Set Margin Left
  63. /psml {
  64.     /marginleft exch 72 mul def
  65. } bind def
  66.  
  67. % ------------ PSMR : Set Margin Right
  68. /psmr {
  69.     /marginright exch 72 mul def
  70. } bind def
  71.  
  72. % ------------ PSMB : Set Margin Bottom
  73. /psmb {
  74.     /marginbottom exch 72 mul def
  75. } bind def
  76.  
  77. % ------------ PSTS : Set Tab Size
  78. /psts {
  79.     /tabsize exch def
  80. } bind def
  81.  
  82. % ------------ PSCO : Set Columns per page
  83. /psco {
  84.     /columns exch def
  85.     columns 1 lt {/columns 1 def} if
  86. } bind def
  87.  
  88. % ------------ PSOR : Set Page Orientation
  89. /psor {
  90.     /orientation exch def
  91. } bind def
  92.  
  93. % ------------ PSNL : Number Lines, non-zero=enable, zero=disable
  94. /psnl {
  95.     /numbering exch 0 ne def
  96. } bind def
  97.  
  98. % ------------ PSPE : Page Eject on form feed, non-zero=enable/zero=disable
  99. /pspe {
  100.     /pageject exch 0 ne def
  101. } bind def
  102.  
  103. % ------------ PSHD : Header, an array of strings
  104. /pshd {
  105.     /header exch def
  106. } bind def
  107.  
  108. % ------------ PSFT : Footer, an array of strings
  109. /psft {
  110.     /footer exch def
  111. } bind def
  112.  
  113. %
  114. % Hughs code starts here 
  115. %
  116. % Standard short abbreviations:
  117.  
  118. /bd {bind def} bind def
  119. /ld {load def} bd
  120. /slw /setlinewidth ld
  121. /cpt /currentpoint ld
  122. /cph /closepath ld
  123. /sg  /setgray ld
  124.  
  125. % Global important variables
  126. % (these may be changed at runtime but we need them now)
  127.  
  128. /windows false def     % windows or OS/2?
  129.  
  130.  
  131. % Font section
  132.  
  133.  
  134. % Routine to duplicate fonts with a new encoding vector
  135. % Based on Manuscript code....
  136.  
  137. /recd 10 dict def
  138. /pcft {
  139.   recd begin
  140.   /ncs windows {ANSI8vec} {CP850vec} ifelse def
  141.   /nfn exch def
  142.   /bfn exch def
  143.   /bfd bfn findfont def
  144.   /nf bfd maxlength dict def
  145.   bfd {
  146.     exch dup dup /FID ne exch
  147.     /Encoding ne and {exch nf 3 1 roll put} {pop pop} ifelse
  148.     } forall
  149.   nf/FontName nfn put
  150.   nf/Encoding ncs put
  151.   nfn nf definefont pop end
  152.   } bd
  153.  
  154. /fs{exch /pt exch def ff pt cu scf sf}bd
  155.  
  156. /setfonts {
  157.  
  158. % Define the appropriate encoding vector for Postscript characters:
  159. % either for Windows (based on ANSI-8 character set),
  160. % or for Presentation Manager (based on codepage 850) (assumes!!!)
  161.  
  162.   windows {
  163.  
  164.   % Windows :
  165.   % define a new encoding vector based on ANSI character set
  166.  
  167.   /ANSI8vec 256 array def
  168.   StandardEncoding ANSI8vec copy pop
  169.  
  170.   /dotaccent/bullet/quotesingle/quotedblleft/quotedblright
  171.   /quotesinglbase/quotedblbase/guilsinglleft/guilsinglright/.notdef
  172.   /ellipsis/perthousand/.notdef/.notdef/paragraph
  173.   /section/dagger/daggerdbl/OE/oe
  174.   /fi/fl/endash/emdash/fraction
  175.   /Ydieresis
  176.   ANSI8vec 6 26 getinterval astore pop
  177.   /quotesingle
  178.   ANSI8vec 39 1 getinterval astore pop
  179.   /grave
  180.   ANSI8vec 96 1 getinterval astore pop
  181.   /bar
  182.   ANSI8vec 124 1 getinterval astore pop
  183. % 128
  184.   /.notdef/.notdef/.notdef/.notdef/.notdef
  185.   /.notdef/.notdef/.notdef/.notdef/.notdef
  186.   /.notdef/.notdef/.notdef/.notdef/.notdef
  187.   /.notdef/.notdef/quoteleft/quoteright/quotedblleft
  188. % 148
  189.   /quotedblright/bullet/endash/emdash/.notdef
  190.   /.notdef/.notdef/.notdef/.notdef/.notdef
  191.   /.notdef/.notdef/space/exclamdown/cent
  192.   /sterling/currency/yen/brokenbar/section
  193. % 168
  194.   /dieresis/copyright/ordfeminine/guillemotleft/logicalnot
  195.   /hyphen/registered/macron/degree/plusminus
  196.   /twosuperior/threesuperior/acute/mu/paragraph
  197.   /periodcentered/cedilla/onesuperior/ordmasculine/guillemotright
  198. % 188
  199.   /onequarter/onehalf/threequarters/questiondown/Agrave
  200.   /Aacute/Acircumflex/Atilde/Adieresis/Aring
  201.   /AE/Ccedilla/Egrave/Eacute/Ecircumflex
  202.   /Edieresis/Igrave/Iacute/Icircumflex/Idieresis
  203. % 208
  204.   /Eth/Ntilde/Ograve/Oacute/Ocircumflex
  205.   /Otilde/Odieresis/multiply/Oslash/Ugrave
  206.   /Uacute/Ucircumflex/Udieresis/Yacute/Thorn
  207.   /germandbls/agrave/aacute/acircumflex/atilde
  208. % 228
  209.   /adieresis/aring/ae/ccedilla/egrave
  210.   /eacute/ecircumflex/edieresis/igrave/iacute
  211.   /icircumflex/idieresis/eth/ntilde/ograve
  212.   /oacute/ocircumflex/otilde/odieresis/divide
  213. % 248
  214.   /oslash/ugrave/uacute/ucircumflex/udieresis
  215.   /yacute/thorn/ydieresis
  216.   ANSI8vec 128 128 getinterval astore pop
  217.   }
  218.  
  219.   {
  220.   % Presentation Manager:
  221.   % define a new encoding vector based on code page 850
  222.  
  223.   /CP850vec 256 array def
  224.   StandardEncoding CP850vec copy pop
  225.  
  226.   /dotaccent/bullet/quotesingle/quotedblleft/quotedblright
  227.   /quotesinglbase/quotedblbase/guilsinglleft/guilsinglright/.notdef
  228.   /ellipsis/perthousand/.notdef/.notdef/paragraph
  229.   /section/dagger/daggerdbl/OE/oe
  230.   /fi/fl/endash/emdash/fraction
  231.   /Ydieresis
  232.   CP850vec 6 26 getinterval astore pop
  233.  
  234.   /Ccedilla/udieresis/eacute/acircumflex/adieresis
  235.   /agrave/aring/ccedilla/ecircumflex/edieresis
  236.   /egrave/idieresis/icircumflex/igrave/Adieresis
  237.   /Aring/Eacute/ae/AE/ocircumflex
  238.   /odieresis/ograve/ucircumflex/ugrave/ydieresis
  239.   /Odieresis/Udieresis/oslash/sterling/Oslash
  240.   /.notdef/florin/aacute/iacute/oacute
  241.   /uacute/ntilde/Ntilde/ordfeminine/ordmasculine
  242.   /questiondown/registered/.notdef/onehalf/onequarter
  243.   /exclamdown/guillemotleft/guillemotright/.notdef/.notdef
  244.   /.notdef/.notdef/.notdef/Aacute/Acircumflex
  245.   /Agrave/copyright/.notdef/.notdef/.notdef
  246.   /.notdef/cent/yen/.notdef/.notdef
  247.   /grave/.notdef/circumflex/tilde/.notdef
  248.   /atilde/Atilde/.notdef/.notdef/.notdef
  249.   /.notdef/.notdef/.notdef/.notdef/currency
  250.   /eth/Eth/Ecircumflex/Edieresis/Egrave
  251.   /dotlessi/Iacute/Icircumflex/Idieresis/.notdef
  252.   /.notdef/.notdef/.notdef/brokenbar/Igrave
  253.   /.notdef/Oacute/germandbls/Ocircumflex/Ograve
  254.   /otilde/Otilde/.notdef/thorn/Thorn
  255.   /Uacute/Ucircumflex/Ugrave/yacute/Yacute
  256.   /.notdef/acute/.notdef/.notdef/.notdef
  257.   /threequarters/paragraph/section/.notdef/cedilla
  258.   /ring/dieresis/periodcentered/onesuperior/threesuperior
  259.   /twosuperior/.notdef/.notdef
  260.   CP850vec 128 128 getinterval astore pop
  261.  
  262.   } ifelse
  263.  
  264.   %  Set up the appropriate fonts now
  265.  
  266.   /Courier /CR pcft
  267. % /Courier-Bold /CoRB pcft
  268. % /Courier-Oblique /CRO pcft
  269. % /Courier-BoldOblique /CRBO pcft
  270.   /Times-Roman /TIM pcft
  271. % /Times-Bold /TIB pcft
  272. % /Times-Italic /TII pcft
  273. % /Times-BoldItalic /TBI pcft
  274. % /Helvetica /HEL pcft
  275.   /Helvetica-Bold /HLB pcft
  276. % /Helvetica-Oblique /HLO pcft
  277. % /Helvetica-BoldOblique /HBO pcft
  278.   /Sym{/Symbol fs}bd
  279.  
  280.   % Initialise the ones we're using:
  281.  
  282.   setscale
  283.  
  284. } bd
  285.  
  286. % these must only be run after setfonts
  287. /dlgchar  {/CR findfont ch1 scalefont setfont} bd
  288. /headchar {/TIM findfont ch2 scalefont setfont} bd
  289. /footchar {/TIM findfont ch3 scalefont setfont} bd
  290.  
  291. %
  292. % Hughs code ends here 
  293. %
  294.  
  295.  
  296. %    ============    Local Routines    ============
  297.  
  298. % ------------ InsertPage
  299. /insertpage {
  300.     dup (#) search
  301.     {
  302.         pop pop pop                    % remove the results of successful search
  303.         /buf 100 string def        % make a clean buffer area
  304.         /bi 0 def                    % indexer into buf
  305.         {
  306.             dup 35 eq                    % is it the '#' character?
  307.             {
  308.                 pagenum
  309.                 6 string
  310.                 cvs
  311.                 dup length                    % number of chars in pagenum string
  312.                 buf bi 4 -1 roll            % set up for putinterval
  313.                 putinterval
  314.                 bi add /bi exch def        % advance bi over pagenum string
  315.             }
  316.             {
  317.                 buf bi                    % just copy the char to buf
  318.                 3 -1 roll
  319.                 put
  320.                 /bi bi 1 add def        % advance the index
  321.             }
  322.             ifelse
  323.         }
  324.         forall
  325.         buf (\000) search            % find the terminating null
  326.         pop                            % throw away boolean result
  327.         exch pop                        % throw away match substring
  328.         exch pop                        % throw away post substring
  329.     }
  330.     {
  331.         pop                    % remove the duplicate string
  332.     }
  333.     ifelse
  334. } bind def
  335.  
  336. % ------------ LeftText
  337. /lefttext {
  338.     pageleft exch moveto
  339.     show
  340. } bind def
  341.  
  342. % ------------ CenterText
  343. /centertext {
  344.     pageleft
  345.     pagewidth 2 div
  346.     add
  347.     2 index
  348.     stringwidth pop 2 div
  349.     sub
  350.     exch moveto
  351.     show
  352. } bind def
  353.  
  354. % ------------ RightText
  355. /righttext {
  356.     pageright
  357.     2 index
  358.     stringwidth pop
  359.     sub
  360.     exch moveto
  361.     show
  362. } bind def
  363.  
  364. % ------------ DoHeader
  365. /doheader {
  366.     gsave
  367.         newpath
  368.         pageleft pagetop headerheight sub moveto
  369.         pageright pagetop headerheight sub lineto
  370.         stroke
  371.         hffont setfont
  372.         /hfrow 1 def
  373.         /hfpos 0 def
  374.         header
  375.         {
  376.             insertpage
  377.             pagetop hfpoints hfrow mul sub
  378.             hfpos 0 eq {lefttext} if
  379.             hfpos 1 eq {centertext} if
  380.             hfpos 2 eq {righttext} if
  381.             hfpos 2 ge
  382.                 {/hfpos 0 def /hfrow hfrow 1 add def}
  383.                 {/hfpos hfpos 1 add def}
  384.                 ifelse
  385.         } forall
  386.     grestore
  387. } bind def
  388.  
  389. % ------------ DoFooter
  390. /dofooter {
  391.     gsave
  392.         newpath
  393.         pageleft pagebottom footerheight add moveto
  394.         pageright pagebottom footerheight add lineto
  395.         stroke
  396.         hffont setfont
  397.         /hfrow 1 def
  398.         /hfpos 0 def
  399.         footer
  400.         {
  401.             insertpage
  402.             pagebottom footerheight add hfpoints hfrow mul sub
  403.             hfpos 0 eq {lefttext} if
  404.             hfpos 1 eq {centertext} if
  405.             hfpos 2 eq {righttext} if
  406.             hfpos 2 ge
  407.                 {/hfpos 0 def /hfrow hfrow 1 add def}
  408.                 {/hfpos hfpos 1 add def}
  409.                 ifelse
  410.         } forall
  411.     grestore
  412. } bind def
  413.  
  414. % ------------ StartFrame
  415. /startframe {
  416.         grestore
  417.     /frameleft currentframe 1 sub framewidth mul pageleft add def
  418.     /framevert frameleft 5 add def
  419.     numbering
  420.     {
  421.         /framevert frameleft linumwidth 5 add add def
  422.     } if
  423.     /frametop pagetop headerheight sub def
  424.     /framebottom pagebottom footerheight add def
  425.     currentframe 1 gt
  426.     {
  427.         newpath
  428.         frameleft frametop moveto
  429.         frameleft framebottom lineto
  430.         stroke
  431.     } if
  432.     gsave newpath
  433.         frameleft framebottom moveto
  434.         frameleft frametop lineto
  435.         frameleft framewidth add frametop lineto
  436.         frameleft framewidth add framebottom lineto
  437.         closepath
  438.         clip
  439.         textfont setfont
  440.         framevert frametop linesize sub moveto
  441. } bind def
  442.  
  443. % ------------ FirstFrame
  444. /firstframe {
  445.     /currentframe 1 def
  446.     startframe
  447. } bind def
  448.  
  449. % ------------ NextFrame
  450. /nextframe {
  451.     /currentframe currentframe 1 add def
  452.  
  453.     currentframe columns gt
  454.     {
  455.             grestore
  456.         showpage
  457.         nextpage
  458.     }
  459.     {
  460.         startframe
  461.     }
  462.     ifelse
  463. } bind def
  464.  
  465. % ------------ StartPage
  466. /startpage {
  467.     orientation 0 eq
  468.     {    % --- Portrait
  469.     }
  470.     {    % --- Landscape
  471.         90 rotate
  472.         0 -612 translate
  473.     }
  474.     ifelse
  475.     header length 0 ne {doheader} if
  476.     footer length 0 ne {dofooter} if
  477.     gsave
  478.     firstframe
  479. } bind def
  480.  
  481. % ------------ FirstPage
  482. /firstpage {
  483.     orientation 0 eq
  484.     {    %  Portrait
  485.         /pageleft marginleft def
  486.         /pageright 612 marginright sub def
  487.         /pagetop 792 margintop sub def
  488.         /pagebottom marginbottom def
  489.     }
  490.     {    % Landscape
  491.         /pageleft marginleft def
  492.         /pageright 792 marginright sub def
  493.         /pagetop 612 margintop sub def
  494.         /pagebottom marginbottom def
  495.     }
  496.     ifelse
  497.  
  498.     /pagewidth pageright pageleft sub def
  499.     /framewidth pagewidth columns div def
  500.  
  501.     /textfont /CR findfont charsize scalefont def
  502.     textfont setfont
  503.     /linesize charsize def
  504.     /tabdist (0123456789) stringwidth pop 10 div tabsize mul def
  505.  
  506.     /linumfont /CR findfont charsize scalefont def
  507.     linumfont setfont
  508.     /linumwidth (00000) stringwidth pop def
  509.  
  510.     /headerheight header length 2 add 3 idiv hfpoints mul 6 add def
  511.     /footerheight footer length 2 add 3 idiv hfpoints mul def
  512.  
  513.     startpage
  514. } def
  515.  
  516. % ------------ NextPage
  517. /nextpage {
  518.     /pagenum pagenum 1 add def
  519.     startpage
  520. } bind def
  521.  
  522. % ============ Text File Commands ============
  523.  
  524. % ------------ BF : Begin File
  525. /bf {
  526.     /pagenum 1 def
  527.     /linenum 1 def
  528.     firstpage
  529. } def
  530.  
  531. % ------------ EF : End File
  532. /ef {
  533.     showpage
  534. } bind def
  535.  
  536. % ------------ TA : Tab
  537. /ta {
  538.     currentpoint exch
  539.     framevert {dup 1 sub 2 index gt {exit} if tabdist add} loop
  540.     exch pop exch moveto
  541. } def
  542.  
  543. % ------------ LF : Line Feed
  544. /lf {
  545.     numbering
  546.     {
  547.         % save current point and font
  548.         currentpoint
  549.         currentfont
  550.  
  551.         linumfont setfont
  552.         /str 7 string def
  553.         linenum str cvs dup stringwidth pop
  554.         neg framevert add 5 sub currentpoint exch pop moveto
  555.         show
  556.  
  557.         % restore current point and font
  558.         setfont
  559.         moveto
  560.  
  561.     } if
  562.     0 linesize neg rmoveto
  563.     currentpoint exch pop framebottom 2 add le {nextframe} if
  564.     /linenum linenum 1 add def
  565. } bind def
  566.  
  567. % ------------ CR : Carrage Return
  568. /cr {
  569.     currentpoint exch pop framevert exch moveto
  570. } bind def
  571.  
  572. % ------------ TX : Text
  573. /tx {
  574.     show
  575. } bind def
  576.  
  577. % ------------ CODE : process some other character code
  578. /code {
  579.     /codechar exch def
  580.     /codeshow true def
  581.     codechar 12 eq {pageject {/codeshow false def nextframe} if} if
  582.     codeshow {(\250) show} if
  583. } def
  584.  
  585. %    +===============================================+
  586. %    | The program will append the file's settings    |
  587. %    | and the `packaged' file after this header.    |
  588. %    +===============================================+
  589. 8 psts
  590. 9 pscs
  591. 0 psnl
  592. 1 pspe
  593. 0 psor
  594. 1 psco
  595.  0.500 psmt
  596.  0.750 psml
  597.  0.500 psmr
  598.  0.500 psmb
  599. setfonts
  600.  
  601.